View Javadoc

1   package uba.db.sql.interpreter.sentencevalidation;
2   
3   import java.util.HashSet;
4   import java.util.Iterator;
5   import java.util.List;
6   import java.util.Set;
7   
8   import uba.db.Database;
9   import uba.db.UnknowTableName;
10  import uba.db.sql.language.Sentence;
11  import uba.db.table.Table;
12  
13  /***
14   * @version $Revision: 1.1 $
15   */
16  public class SentenceValidator {
17      private Database database;
18      private Set referencedTables;
19      private List validations;
20  
21      public SentenceValidator(Sentence sentence, Database database) {
22          this.database = database;
23          this.referencedTables = new HashSet();
24          initializeValidationsFor(sentence);
25      }
26  
27      private void initializeValidationsFor(Sentence sentence) {
28          ValidationSetUpVisitor validationSetUpVisitor = new ValidationSetUpVisitor(
29                  sentence, this);
30          sentence.accept(validationSetUpVisitor);
31          validations = validationSetUpVisitor.validations();
32      }
33  
34      public void addReferencedTableNamed(String tableName) throws UnknowTableName {
35          Table table = database.tableNamed(tableName);
36          referencedTables.add(table);
37      }
38  
39      public boolean isExistantTableName(String tableName) {
40              return database.containsTableNamed(tableName);
41      }
42      public Set findReferencedTablesWithColumnNamed(String columnName) {
43          Iterator iterator = referencedTables.iterator();
44          Set result = new HashSet();
45  
46          while (iterator.hasNext()) {
47              Table table = (Table) iterator.next();
48              if (table.columnNamed(columnName) != null) {
49                  result.add(table);
50              }
51          }
52  
53          return result;
54      }
55  
56      public void execute() throws SentenceValidationException {
57          Iterator iter = validations.iterator();
58          while (iter.hasNext()) {
59              ((SentenceValidationBehavior) iter.next()).execute();
60          }
61      }
62  }